<?php  if (!defined('BASEPATH') || !defined('CRON')) exit('No direct script access allowed');

require_once APPPATH . 'controllers/cron.php';

/**
 * Крон скрипт пометки видео как featured
 * 
 * @author Gennadiy Kozlenko
 */
class Cron_Featured extends Cron {
   
   // Количество fetured фильмов
   const NUM_FEATURED = 100;
   
   // Минимальное количество голосов для включения в рейтинг
   const MIN_VOITES = 10;
   
   /**
    * Конструктор класса
    *
    * @return Cron_Featured
    */
   function Cron_Featured() {
      parent::Cron();
   }
   
   /**
    * Метод по умолчанию
    *
    */
   function index() {
      $this->log('Start mark featured');
      // Плодсчитываем среднюю оценку всех фильмов
      $totalCost = 0;
      $this->db->select_sum('sum_ratings')
         ->select_sum('num_ratings')
         ->from('videos')
         ->where('status', 'active')
         ->where('num_torrents >', 0);
      $query = $this->db->get();
      if (0 < $query->num_rows()) {
         $totalCost = $query->row()->sum_ratings / $query->row()->num_ratings;
      }
      $this->log(sprintf('Avg scoreamong all the videos: %0.2f', $totalCost));
      // Обрабатываем все видео и подсчитываем рейтинг
      $ratings = array();
      $this->db->select('id_video, sum_ratings, num_ratings')
         ->from('videos')
         ->where('status', 'active')
         ->where('image <>', '')
         ->where('num_torrents >', 0)
         ->where('num_ratings > ', self::MIN_VOITES);
      $query = $this->db->get();
      if (0 < $query->num_rows()) {
         foreach ($query->result() as $row) {
            $ratings[$row->id_video] = ($row->sum_ratings + $totalCost * self::MIN_VOITES) / ($row->num_ratings + self::MIN_VOITES);
         }
      }
      // Сортируем видео по рейтингу
      arsort($ratings);
      // Получаем список айдишников
      $ids = array_slice(array_keys($ratings), 0, self::NUM_FEATURED);
      if (0 < count($ids)) {
         // Помечаем видео как featured
         $this->db->where_in('id_video', $ids)
            ->where('is_featured', 'no')
            ->update('videos', array('is_featured' => 'yes'));
         // И наоборот
         $this->db->where_not_in('id_video', $ids)
            ->where('is_featured', 'yes')
            ->update('videos', array('is_featured' => 'no'));
      }
      $this->log('Stop mark featured');
   }
   
}
